#include <stdio.h>
#include <fcntl.h>           /* For O_* constants */
#include <sys/stat.h>        /* For mode constants */
#include <semaphore.h>
#include <pthread.h>
#include <stdlib.h>
 
int value = 0;  // 全局变量，所有的线程共享
sem_t *sem1;
sem_t *sem2;

// 线程任务函数 --- 子线程
void* task(void* arg)
{
    while (1)
    {
        sem_wait(sem1);
        printf("子线程增加value的值\n");
        value++;
        sem_post(sem2);
    }
    
}

// 主函数 -- 主线程
int main(int argc, char const *argv[])
{
	system("rm /dev/shm/sem.sem1");  //删除信号量文件
	system("rm /dev/shm/sem.sem2");
	
    // 1、创建两个信号量
    sem1 = sem_open("sem1", O_CREAT, 0777, 1);
    sem2 = sem_open("sem2", O_CREAT, 0777, 0);

    // 2、创建线程
    pthread_t ptid;
    pthread_create(&ptid, NULL, task ,NULL);

    // 3、进行PV操作
    while (1)
    {
        // p操作
        sem_wait(sem2);
        printf("主线程输出:%d\n", value);

        // V操作
        sem_post(sem1);
    }
    

    
    return 0;
}
